//
// Created by moonlight on 25-7-15.
//
#include<iostream>
#include<deque>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<ctime>
using namespace std;
void print(const deque<int> &d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
void test01() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    deque<int> d2(d1.begin(), d1.end());
    deque<int> d3(10,100);
    deque<int> d4(d3);
    print(d1);
}
//赋值操作
void test02() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    print(d1);
    deque<int> d2 = d1;
    print(d2);
    deque<int> d3;
    d3.assign(d2.begin(), d2.end());

}
void test03() {
    deque<int> d1;
    cout <<"before size: "<< d1.size() << endl;
    cout <<"before empty: "<< d1.empty()<< endl;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    cout <<"after size: "<< d1.size() << endl;
    cout <<"after empty: "<< d1.empty()<< endl;
    d1.resize(15,66);
    print(d1);
}
void test04() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    print(d1);
    d1.pop_back();
    print(d1);
    d1.push_front(20);
    print(d1);
    d1.pop_front();
    print(d1);
    d1.insert(d1.begin(),2,1000);

    deque<int> d2;
    d2.push_back(1);
    d2.push_back(2);
    d2.push_back(3);
    d1.insert(d1.end(),d2.begin(),d2.end());
    print(d1);
    //删除
    deque<int>::iterator it = d1.begin();
    it++;
    d1.erase(it);
    print(d1);
    // d1.erase(d1.begin(),d1.end());
    // print(d1);
    cout<<d1.front()<<endl;
    cout<<d1.back()<<endl;
    cout<<d1[2]<<endl;
    cout<<d1.at(2)<<endl;
}
void test05() {
    std::srand(static_cast<unsigned int>(std::time(nullptr)));
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        int num = rand() % 100+1;
        d1.push_back(num);
    }
    print(d1);
    sort(d1.begin(), d1.end());//排序
    print(d1);
}
int main() {
    cout<<"Hello Deque!"<<endl;
    test05();
    return 0;
}